import {fileURLToPath, URL} from 'node:url'
import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import {viteMockServe} from 'vite-plugin-mock'

export default defineConfig(({mode}) => {
    const env = loadEnv(mode, process.cwd())

    return {
        // 开发或生产环境服务的公共基础路径
        base: env.VITE_BASE,
        // 路径别名
        resolve: {
            alias: {
                '~': fileURLToPath(new URL('./', import.meta.url)),
                '@': fileURLToPath(new URL('./src', import.meta.url))
            }
        },
        // 引入sass全局样式变量
        css: {
            preprocessorOptions: {
                scss: {}
            }
        },
        server: {
            port: 9763,
            // 服务启动时是否自动打开浏览器
            open: false,
            // 本地跨域代理 -> 代理到服务器的接口地址
            proxy: {
                '/api': {
                    target: env.VITE_API_BASE_URL, // 后台服务器地址
                    changeOrigin: true, // 是否允许不同源
                    secure: true, // 支持https
                    rewrite: (path) => path.replace(/^\/api/, '/api')
                },
                '/echartsApi': {
                    target: 'https://echarts.apache.org',
                    changeOrigin: true,
                    secure: true,
                    rewrite: (path) => path.replace(/^\/echartsApi/, '/')
                }
            }
        },
        plugins: [
            vue(),
            vueJsx(),
            AutoImport({
                // 自动导入vue相关函数，如: ref、reactive、toRef等
                imports: ['vue', 'vue-router', {
                    // vue 3.5.x
                    vue: ['useTemplateRef', 'onWatcherCleanup', 'useId']
                }],
                dts: 'src/auto-import.d.ts'
            }),
            Components({
                // 指定组件位置，默认是 src/components 自动导入自定义组件
                dirs: ['src/components'],
                extensions: ['vue', 'tsx'],
                // 配置文件生成位置
                dts: 'src/components.d.ts'
            }),
            viteMockServe({
                mockPath: 'mock', // 目录位置
                logger: true, //  是否在控制台显示请求日志
                // enable: true,
                supportTs: true, // 是否读取ts文件模块
                localEnabled: true, // 设置是否启用本地mock文件
                prodEnabled: true, // 设置打包是否启用mock功能
                // 这样可以控制关闭mock的时候不让mock打包到最终代码内
                injectCode: `
                  import { setupProdMockServer } from './mock/index.js';
                  setupProdMockServer();
                `
            })
        ],
    }
})
